package com.example.ai;

import org.springframework.ai.chat.ChatClient;
import org.springframework.web.bind.annotation.*;

import java.util.Map;
import java.util.HashMap;

/**
 * AI控制器类，专门处理与AI相关的HTTP请求
 * 提供多种AI交互方式，包括简单问答、格式化输出、多轮对话等
 */
@RestController
@RequestMapping("/api/ai")
public class AIController {

    private final ChatClient chatClient;
    private final Map<String, String> conversationHistory = new HashMap<>();

    public AIController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    /**
     * 简单的AI问答接口
     * @param question 用户的问题
     * @return AI的回答
     */
    @GetMapping("/simple-ask")
    public String simpleAsk(@RequestParam String question) {
        return chatClient.prompt(question);
    }

    /**
     * 支持格式的AI问答接口
     * @param question 用户的问题
     * @param format 输出格式（text或json）
     * @return AI的回答
     */
    @GetMapping("/format-ask")
    public String formatAsk(@RequestParam String question,
                           @RequestParam(required = false, defaultValue = "text") String format) {
        String prompt;
        if ("json".equalsIgnoreCase(format)) {
            prompt = String.format("请以JSON格式回答以下问题：%s，JSON包含question和answer两个字段", question);
        } else if ("markdown".equalsIgnoreCase(format)) {
            prompt = String.format("请以Markdown格式回答以下问题：%s", question);
        } else {
            prompt = question;
        }
        return chatClient.prompt(prompt);
    }

    /**
     * 支持多轮对话的AI接口
     * @param sessionId 会话ID，用于区分不同的对话
     * @param question 用户的问题
     * @return AI的回答
     */
    @PostMapping("/chat")
    public String chat(@RequestParam String sessionId, @RequestBody String question) {
        // 获取该会话的历史记录
        String history = conversationHistory.getOrDefault(sessionId, "");
        
        // 构建包含历史记录的提示词
        String prompt = history + "\n用户：" + question + "\nAI：";
        
        // 获取AI的回答
        String answer = chatClient.prompt(prompt);
        
        // 更新会话历史
        conversationHistory.put(sessionId, prompt + answer);
        
        return answer;
    }

    /**
     * 重置指定会话的历史记录
     * @param sessionId 会话ID
     * @return 操作结果
     */
    @DeleteMapping("/chat/{sessionId}")
    public String resetChat(@PathVariable String sessionId) {
        conversationHistory.remove(sessionId);
        return "会话历史已重置";
    }

    /**
     * 获取当前活跃的会话数量
     * @return 会话数量
     */
    @GetMapping("/chat/sessions")
    public Map<String, Integer> getActiveSessions() {
        Map<String, Integer> result = new HashMap<>();
        result.put("activeSessions", conversationHistory.size());
        return result;
    }

    /**
     * 自定义提示词模板接口
     * @param template 提示词模板
     * @param content 要填充的内容
     * @return AI的回答
     */
    @PostMapping("/custom")
    public String customPrompt(@RequestParam String template, @RequestParam String content) {
        String prompt = String.format(template, content);
        return chatClient.prompt(prompt);
    }
}